1fc3006865d2d64974750fc449496f7ca9569834,ais-ab-analyzer/src/test/java/dk/dma/ais/abnormal/analyzer/analysis/SuddenSpeedChangeAnalysisTest.java,SuddenSpeedChangeAnalysisTest,eventIsRaisedForSuddenSpeedChangeSpanningSeveralMessages,#,166

Before Change



        /* Grounding of 314234000 on Jul 03 2009 - 20:44:18 - 20:45:18 */

        track.update(Analysis.toEpochMillis(track.getTimeOfLastPositionReport()) + deltaSecs * 1000, Position.create(56, 12), 45.0f, 13.9f, 45.0f);
        context.checking(new Expectations() {{
            ignoring(eventRepository).findOngoingEventByVessel(219000606, SuddenSpeedChangeEvent.class);
            never(eventRepository).save(with(eventCaptor.getMatcher()));
        }});
        analysis.onSpeedOverGroundUpdated(new PositionChangedEvent(track, null));
        context.assertIsSatisfied();

        track.update(Analysis.toEpochMillis(track.getTimeOfLastPositionReport()) + deltaSecs * 1000, Position.create(56, 12), 45.0f, 13.3f, 45.0f);
        context.checking(new Expectations() {{
            ignoring(eventRepository).findOngoingEventByVessel(219000606, SuddenSpeedChangeEvent.class);
            never(eventRepository).save(with(eventCaptor.getMatcher()));
        }});
        analysis.onSpeedOverGroundUpdated(new PositionChangedEvent(track, null));
        context.assertIsSatisfied();

        track.update(Analysis.toEpochMillis(track.getTimeOfLastPositionReport()) + deltaSecs * 1000, Position.create(56, 12), 45.0f, 11.7f, 45.0f);
        context.checking(new Expectations() {{
            ignoring(eventRepository).findOngoingEventByVessel(219000606, SuddenSpeedChangeEvent.class);
            never(eventRepository).save(with(eventCaptor.getMatcher()));
        }});
        analysis.onSpeedOverGroundUpdated(new PositionChangedEvent(track, null));
        context.assertIsSatisfied();

        track.update(Analysis.toEpochMillis(track.getTimeOfLastPositionReport()) + deltaSecs * 1000, Position.create(56, 12), 45.0f, 8.3f, 45.0f);
        context.checking(new Expectations() {{
            ignoring(eventRepository).findOngoingEventByVessel(219000606, SuddenSpeedChangeEvent.class);
            never(eventRepository).save(with(eventCaptor.getMatcher()));
        }});
        analysis.onSpeedOverGroundUpdated(new PositionChangedEvent(track, null));
        context.assertIsSatisfied();

        track.update(Analysis.toEpochMillis(track.getTimeOfLastPositionReport()) + deltaSecs * 1000, Position.create(56, 12), 45.0f, 5.0f, 45.0f);
        context.checking(new Expectations() {{
            ignoring(eventRepository).findOngoingEventByVessel(219000606, SuddenSpeedChangeEvent.class);
            never(eventRepository).save(with(eventCaptor.getMatcher()));
        }});
        analysis.onSpeedOverGroundUpdated(new PositionChangedEvent(track, null));
        context.assertIsSatisfied();

        track.update(Analysis.toEpochMillis(track.getTimeOfLastPositionReport()) + deltaSecs * 1000, Position.create(56, 12), 45.0f, 1.9f, 45.0f);
        context.checking(new Expectations() {{
            ignoring(eventRepository).findOngoingEventByVessel(219000606, SuddenSpeedChangeEvent.class);
            never(eventRepository).save(with(eventCaptor.getMatcher()));
        }});
        analysis.onSpeedOverGroundUpdated(new PositionChangedEvent(track, null));
        context.assertIsSatisfied();

        for (int i=0; i<6; i++) { // Sustain low speed
            track.update(Analysis.toEpochMillis(track.getTimeOfLastPositionReport()) + deltaSecs * 1000, Position.create(56, 12), 45.0f, 0.0f, 45.0f);
            context.checking(new Expectations() {{
                ignoring(eventRepository).findOngoingEventByVessel(219000606, SuddenSpeedChangeEvent.class);
                never(eventRepository).save(with(eventCaptor.getMatcher()));
            }});
            analysis.onSpeedOverGroundUpdated(new PositionChangedEvent(track, null));
            context.assertIsSatisfied();
        }

        track.update(Analysis.toEpochMillis(track.getTimeOfLastPositionReport()) + deltaSecs * 1000, Position.create(56, 12), 45.0f, 0.2f, 45.0f);
        context.checking(new Expectations() {{
            ignoring(eventRepository).findOngoingEventByVessel(219000606, SuddenSpeedChangeEvent.class);
            oneOf(eventRepository).save(with(eventCaptor.getMatcher()));

After Change



        /* Grounding of 314234000 on Jul 03 2009 - 20:44:18 - 20:45:18 */

        track.update(track.getTimeOfLastPositionReport() + deltaSecs * 1000, Position.create(56, 12), 45.0f, 13.9f, 45.0f);
        context.checking(new Expectations() {{
            ignoring(eventRepository).findOngoingEventByVessel(219000606, SuddenSpeedChangeEvent.class);
            never(eventRepository).save(with(eventCaptor.getMatcher()));
        }});
        analysis.onSpeedOverGroundUpdated(new PositionChangedEvent(track, null));
        context.assertIsSatisfied();

        track.update(track.getTimeOfLastPositionReport() + deltaSecs * 1000, Position.create(56, 12), 45.0f, 13.3f, 45.0f);
        context.checking(new Expectations() {{
            ignoring(eventRepository).findOngoingEventByVessel(219000606, SuddenSpeedChangeEvent.class);
            never(eventRepository).save(with(eventCaptor.getMatcher()));
        }});
        analysis.onSpeedOverGroundUpdated(new PositionChangedEvent(track, null));
        context.assertIsSatisfied();

        track.update(track.getTimeOfLastPositionReport() + deltaSecs * 1000, Position.create(56, 12), 45.0f, 11.7f, 45.0f);
        context.checking(new Expectations() {{
            ignoring(eventRepository).findOngoingEventByVessel(219000606, SuddenSpeedChangeEvent.class);
            never(eventRepository).save(with(eventCaptor.getMatcher()));
        }});
        analysis.onSpeedOverGroundUpdated(new PositionChangedEvent(track, null));
        context.assertIsSatisfied();

        track.update(track.getTimeOfLastPositionReport() + deltaSecs * 1000, Position.create(56, 12), 45.0f, 8.3f, 45.0f);
        context.checking(new Expectations() {{
            ignoring(eventRepository).findOngoingEventByVessel(219000606, SuddenSpeedChangeEvent.class);
            never(eventRepository).save(with(eventCaptor.getMatcher()));
        }});
        analysis.onSpeedOverGroundUpdated(new PositionChangedEvent(track, null));
        context.assertIsSatisfied();

        track.update(track.getTimeOfLastPositionReport() + deltaSecs * 1000, Position.create(56, 12), 45.0f, 5.0f, 45.0f);
        context.checking(new Expectations() {{
            ignoring(eventRepository).findOngoingEventByVessel(219000606, SuddenSpeedChangeEvent.class);
            never(eventRepository).save(with(eventCaptor.getMatcher()));
        }});
        analysis.onSpeedOverGroundUpdated(new PositionChangedEvent(track, null));
        context.assertIsSatisfied();

        track.update(track.getTimeOfLastPositionReport() + deltaSecs * 1000, Position.create(56, 12), 45.0f, 1.9f, 45.0f);
        context.checking(new Expectations() {{
            ignoring(eventRepository).findOngoingEventByVessel(219000606, SuddenSpeedChangeEvent.class);
            never(eventRepository).save(with(eventCaptor.getMatcher()));
        }});
        analysis.onSpeedOverGroundUpdated(new PositionChangedEvent(track, null));
        context.assertIsSatisfied();

        for (int i=0; i<6; i++) { // Sustain low speed
            track.update(track.getTimeOfLastPositionReport() + deltaSecs * 1000, Position.create(56, 12), 45.0f, 0.0f, 45.0f);
            context.checking(new Expectations() {{
                ignoring(eventRepository).findOngoingEventByVessel(219000606, SuddenSpeedChangeEvent.class);
                never(eventRepository).save(with(eventCaptor.getMatcher()));
            }});
            analysis.onSpeedOverGroundUpdated(new PositionChangedEvent(track, null));
            context.assertIsSatisfied();
        }

        track.update(track.getTimeOfLastPositionReport() + deltaSecs * 1000, Position.create(56, 12), 45.0f, 0.2f, 45.0f);
        context.checking(new Expectations() {{
            ignoring(eventRepository).findOngoingEventByVessel(219000606, SuddenSpeedChangeEvent.class);
            oneOf(eventRepository).save(with(eventCaptor.getMatcher()));